package org.robertux.leaderboard.imports;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Arrays;

import org.apache.commons.io.IOUtils;
import org.apache.log4j.BasicConfigurator;

import com.robertux.leaderboard.util.ExcelHelper;

public class ProgressImporter {

	public static void main(String[] args) throws IOException {
		if(args.length == 0) {
			System.out.println("Debe pasar como parámetro la ruta y nombre del archivo a importar");
			return;
		}
		BasicConfigurator.configure();
		
		File file = new File(args[0]);
		if(!file.exists() || !file.canRead()) {
			System.out.println("El archivo " + args[0] + " no existe o no se puede leer");
			return;
		}
		
		System.out.println("Leyendo archivo " + file.getName() + " con ext " + file.getName().substring(file.getName().lastIndexOf(".")+1));
		String[][] fileContent = ExcelHelper.getFileContent(IOUtils.toByteArray(new FileInputStream(file)), file.getName().substring(file.getName().lastIndexOf(".")+1));
		BufferedWriter writer = new BufferedWriter(new FileWriter(file.getParent() + System.getProperty("file.separator") + "Inserts.sql", false));
		
		for(int i=1; i<fileContent.length; i++) {
			if(fileContent[i].length >= 5) {
				String mes = fileContent[i][0];
				String codEmpleado = fileContent[i][1];
				String ventas = fileContent[i][4];
				String nombreMeta = fileContent[i][3];
				if(nombreMeta.equalsIgnoreCase("Examen")) {
					continue;
				}
				System.out.println("Linea: " + Arrays.toString(fileContent[i]));
				System.out.println("mes: " + mes + ", codEmpleado: " + codEmpleado + ", ventas: " + ventas + ", nombreMeta: " + nombreMeta);
				
				StringBuilder builder;
				try {
					builder = new StringBuilder("INSERT INTO PROGRESO_META(FECHA, VALOR, META_ID, ESTADO, ULTIMA_ACTUALIZACION, VENTAS) ");
					builder.append("SELECT DATE('2014-").append(mes).append("-01'), ");
					builder.append("((").append(Double.parseDouble(ventas)).append(" / MT.VALOR) * 100), MT.ID, 'A', CURRENT_DATE, ");
					builder.append(Double.parseDouble(ventas));
					builder.append(" FROM META MT");
					builder.append(" INNER JOIN USUARIO US ON MT.USUARIO_ID = US.ID");
					builder.append(" WHERE MT.ESTADO = 'A' AND US.ESTADO = 'A'");
					builder.append(" AND US.EMPLEADO_ID = '").append(codEmpleado).append("' AND UPPER(MT.NOMBRE) = UPPER('").append(nombreMeta).append("');");
				} catch (NumberFormatException e) {
					System.out.println("\n\n\t\tExcepcion: " + e.getMessage());
					e.printStackTrace();
					continue;
				}
				
				System.out.println("Escribiendo linea No. " + (i) + ": \t" + builder.toString());
				writer.write(builder.toString());
				writer.write("\n");
			} else {
				System.out.println("Linea No. " + i + " no tiene suficientes columnas");
			}
		}
		writer.flush();
		writer.close();
		
	}

}
